package com.taotao.manage.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.github.abel533.mapper.Mapper;
import com.taotao.common.pojo.ItemCatData;
import com.taotao.common.pojo.ItemCatResult;
import com.taotao.common.service.RedisService;
import com.taotao.manage.mapper.ItemCatMapper;
import com.taotao.manage.pojo.ItemCat;

@Service
public class ItemCatService extends BaseService<ItemCat>{
	
	@Autowired
	private ItemCatMapper itemCatMapper;
	
	@Autowired
	private RedisService redisService;
	
	@Value("${TAOTAO_ITEM_CAT_CACHE_KEY}")
	private String TAOTAO_ITEM_CAT_CACHE_KEY;
	
	@Value("${TAOTAO_ITEM_CAT_CACHE_SECONDS}")
	private Long TAOTAO_ITEM_CAT_CACHE_SECONDS;
	
	public Mapper<ItemCat> getMapper(){
		return this.itemCatMapper;
	}
	
	public ItemCatResult queryItemCatResult(){
	try {
		//从缓存中获取商品类目
		ItemCatResult catResult = redisService.get(TAOTAO_ITEM_CAT_CACHE_KEY, new TypeReference<ItemCatResult>() {
		});
		//缓存有,直接返回
		if (catResult != null) {
			return catResult;
		}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
		
		//创建一个Map集合,key为id,value是一个集合,集合里的对象的parentid和key的值相同
		HashMap<Long, List<ItemCat>> map = new HashMap<>();
		List<ItemCat> itemCats = this.queryAll();
		//遍历类目
		for (ItemCat itemCat : itemCats) {
			//map集合存在此parentid,则直接将对象加入对应的list集合
			if (map.keySet().contains(itemCat.getParentId())) {
				map.get(itemCat.getParentId()).add(itemCat);
				
			}
			else{
				//map集合存在此parentid,则新建一个list集合
				ArrayList<ItemCat> list = new ArrayList<ItemCat>();
				list.add(itemCat);
				map.put(itemCat.getParentId(), list);
			}
			
		}
		
		
		ItemCatResult itemCatResult = new ItemCatResult();
		//1级类目下的二级类目集合
		ArrayList<ItemCatData> list1 = new ArrayList<>();
		//找出一级类目
		List<ItemCat> lvItemCats = map.get(0l);
		//遍历一级类目
		for (ItemCat lvItemCat : lvItemCats) {
			//判断长度为14返回,防止页面的一级目录太多,现在将就下
			if (list1.size()>=14) {
				break;
			}
			
			ItemCatData lvitemCatData = new ItemCatData();
			//一级类目的url
			lvitemCatData.setUrl("/products/"+lvItemCat.getId()+".html");
			//一级类目的name
			lvitemCatData.setName("<a href='/products/" + lvItemCat.getId() + ".html'>" + lvItemCat.getName() + "</a>");
			//找出二级类目
			List<ItemCat> llvItemCats = map.get(lvItemCat.getId());
			//2级类目下的3级类目集合
			ArrayList<ItemCatData> list2 = new ArrayList<>();
			//遍历二级类目
			for (ItemCat llvItemCat : llvItemCats) {
				ItemCatData llvitemCatData = new ItemCatData();
				//二级类目的url
				llvitemCatData.setUrl("/priducts/"+llvItemCat.getId()+".html");
				//二级类目的name
				llvitemCatData.setName(llvItemCat.getName());
				//找出三级类目
				List<ItemCat> lllvItemCats = map.get(llvItemCat.getId());
				//三级类目的集合
				ArrayList<String> list3 = new ArrayList<>();
				//遍历三级类目
				for (ItemCat lllvItemCat : lllvItemCats) {
					//封装三级类目的集合
					list3.add("/products/" + lllvItemCat.getId() + ".html |" + lllvItemCat.getName());
				}
				//3级类目集合
				llvitemCatData.setItems(list3);
				//封装二级类目的集合
				list2.add(llvitemCatData);
			}
			//2级类目集合
			lvitemCatData.setItems(list2);
			//封装一级类目的集合
			list1.add(lvitemCatData);
		}
		itemCatResult.setItemCats(list1);
		
		//将查询结果放入缓存中
		
		try {
			redisService.set(TAOTAO_ITEM_CAT_CACHE_KEY, itemCatResult,TAOTAO_ITEM_CAT_CACHE_SECONDS);
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		}
		
		
		
		
		return itemCatResult;
	}
}
